package juc2.lock;

import java.util.concurrent.CountDownLatch;

/**
 * CountDownLatch：
 * 主线程等待多个子线程完成某项操作，并在所有子线程完成后才继续执行。
 *
 */
public class CountDownLatchDemo1 {
    public static void main(String[] args) throws InterruptedException {
        int threadCount = 3;
        // 初始化计数器为3（需要等待3个子线程）
        CountDownLatch latch = new CountDownLatch(threadCount);

        for (int i = 0; i < threadCount; i++) {
            int taskId = i + 1;
            new Thread(() -> {
                try {
                    System.out.println("子线程" + taskId + "：开始初始化...");
                    Thread.sleep(1000); // 模拟初始化操作
                    System.out.println("子线程" + taskId + "：初始化完成");
                } catch (InterruptedException e) {
                    e.printStackTrace();
                } finally {
                    // 计数器减1（必须放在finally，确保一定执行）
                    System.out.println("剩余未完成的" + latch.getCount());
                    latch.countDown();
                }
            }).start();
        }

        System.out.println("主线程：等待所有子线程初始化完成...");
        // 阻塞等待，直到计数器为0
        latch.await();
        System.out.println("主线程：所有子线程初始化完成，开始执行主逻辑");
    }
}

